#!/usr/bin/python3

import os
import datetime

base_path = '/var/log/rsyslog'
history_path = '/var/log/history_rsyslog'
temp_dir = 'temp'
files_path = []
_date = datetime.datetime.today()
year = str(_date.year)
month = str(_date.month)
day = str(_date.day)
cur_hist_path = history_path + '/' + year + '/' + month + '/' + day


def detect_size(file_path):
    """
    周期发现文件超过指定大小给与分割处理。
    """
    wc_command = 'wc -l {}'
    wc_result = os.popen(wc_command.format(file_path))
    size = 0
    for _ in wc_result:
        if len(_.strip()) > 0:
            size = int(_.split(' ')[0])
            break

    if size > 1000:
        return True
    else:
        return False


def split_file(files):
    """
    对大文件进行分割，最分割后的文件重命名，移动到子目录中。
    """
    # 第一个参数为分割的文件名，第二个参数为分割后的文件名前缀。
    split_command = 'split -l 1000000 -d {} {}'
    for file in files:
        sp_file = cur_hist_path + '/' + file

        if detect_size(sp_file):
            print(sp_file)
            r = os.system(split_command.format(sp_file, file))
            print(r)



def detect_dir():
    """
    对年、月、日目录检测，不存在则创建。
    """
    date_dirs = history_path
    for _d in [year, month, day]:
        date_dirs += '/' + _d
        if not os.path.isdir(date_dirs):
            os.mkdir(date_dirs)


def move_file():
    """
    将当天所有日志移到指定目录。
    """
    detect_dir()
    _files = os.listdir(base_path)
    files = [file_name for file_name in _files if file_name != temp_dir]
    for file in files:
        os.rename(base_path + '/' + file, cur_hist_path + '/' + file)

    return files


def stop_service():
    """
    将当天移动到指定目录后重启rsyslog服务。
    """
    rsyslog_command = 'systemctl restart rsyslog'
    os.system(rsyslog_command)


if __name__ == '__main__':
    files = move_file()
    stop_service()
    split_file(files)
